home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 8.1 KB | 263 lines |
- 20 REM S PARAMETER NODE REDUCTION PROGRAM FOR MULTIPORT NETWORKS
- 40 REM written by David R Love , 7-10-84
- 50 PRINT:PRINT,"via K2UYH/wa2tif":PRINT
- 60 DIM L$(4)
- 80 FOR CL=1 TO 25 :PRINT :NEXT
- 100 REM PRECISION 4
- 120 GOSUB 2880
- 140 INPUT"DATA";U$
- 160 IF U$="ME" THEN 120
- 180 IF U$="LO" THEN 4400
- 200 IF U$="EX" THEN 3820
- 220 IF U$="HC" THEN PT=2:GOSUB 2880:PT=0:GOTO 140
- 240 REM INPUT DATA SECTION ****************************************
- 260 INPUT"INPUT NUMBER OF LINES";MC
- 280 INPUT "INPUT NUMBER OF NODES";NI
- 300 PRINT:DIM M(3,5*MC),A(3,4*MC)
- 320 FOR N=1 TO MC
- 340 PRINT "LINE NUMBER";N
- 360 INPUT "INPUT SOURCE NODE";A(0,N)
- 380 INPUT "INPUT LOAD NODE";A(1,N)
- 400 INPUT "INPUT REFLECTION/XMISSION COEF IN ANGULAR FORM";A(2,N),A(3,N)
- 420 PRINT :NEXT
- 440 GOSUB 2720
- 460 REM MAIN DECISION BLOCK ***************************************
- 480 INPUT"MODS";U$
- 500 IF U$="CH" THEN GOSUB 4660
- 520 IF U$="DS" THEN D1=(D1+2)MOD4:PRINT"MATRIX DATA TURNED ";:IF D1=2 THEN PRINT"ON" ELSE PRINT"OFF"
- 540 IF U$="NS" THEN GOSUB 4880
- 560 IF U$="PR" THEN PR=2:GOSUB 2720:PR=0
- 580 IF U$="HC" THEN PT=2:GOSUB 2880:PT=0
- 600 IF U$="EN" THEN 5180
- 620 IF U$="PP" THEN PS=(PS+2)MOD4 :PRINT"PROCESS TO PRINTER ";:IF PS=2 THEN PRINT"ENABLED" ELSE PRINT"DISABLED"
- 640 IF U$="PA" THEN PX=(PX+2)MOD4 :PRINT"ANSWER TO ";:IF PX=2 THEN PRINT"PRINTER" ELSE PRINT"CRT"
- 660 IF U$="SA" THEN GOSUB 5060
- 680 IF U$="ME" THEN GOSUB 2880
- 700 IF U$="GP" THEN PR=2:PS=2:D1=2:PX=2:GOTO 760
- 720 IF U$<>"GO" THEN 480
- 740 REM POLAR TO RECTANGULAR *************************************
- 760 MD=MC:NJ=NI
- 770 IF D1=2 THEN GOSUB 2720
- 780 FOR X=1 TO MD
- 800 M(0,X)=A(0,X) :M(1,X)=A(1,X)
- 820 M(2,X)=A(2,X)*COS(PI*A(3,X)/180)
- 840 M(3,X)=A(2,X)*SIN(PI*A(3,X)/180)
- 860 NEXT X
- 870 PRINT,"POLAR TO RECTANGULAR"
- 880 IF D1=2 THEN GOSUB 2520
- 900 REM PARALLEL LINE REDUCTION SECTION **************************
- 920 FOR J=1 TO MD-1
- 940 FOR K=J+1 TO MD
- 960 IF M(0,J)=0 THEN 1160
- 980 IF M(0,J)=M(0,K) AND M(1,J)=M(1,K) THEN 1040
- 1000 GOTO 1160
- 1020 REM ADD LINE J TO LINE K
- 1040 M(2,J)=M(2,J) + M(2,K)
- 1060 M(3,J)=M(3,J) + M(3,K)
- 1080 REM CANCEL LINE K
- 1100 M(0,K)=0 :M(1,K)=0
- 1120 PRINT ,"PARALLEL REDUCTION"
- 1140 IF D1=2 THEN GOSUB 2520
- 1160 NEXT :NEXT
- 1180 IF NJ=2 THEN 2040
- 1200 REM NODE REDUCTION SECTION **********************************
- 1220 FOR X=1 TO MD
- 1240 IF M(0,X)<>NJ THEN 1500
- 1260 AF=0
- 1280 FOR Y=1 TO MD
- 1300 IF M(1,Y)<>NJ THEN 1460
- 1320 AF=AF+1
- 1340 IF M(0,AF)<>0 THEN 1320
- 1360 M(0,AF)=M(0,Y):M(1,AF)=M(1,X)
- 1380 M(2,AF)=M(2,X)*M(2,Y)-M(3,X)*M(3,Y)
- 1400 M(3,AF)=M(2,X)*M(3,Y)+M(3,X)*M(2,Y)
- 1420 IF AF>HT THEN HT=AF
- 1440 NK=NJ
- 1460 NEXT Y
- 1480 M(0,X)=0:M(1,X)=0
- 1500 NEXT X
- 1520 FOR Z=1 TO MD
- 1540 IF M(1,Z)=NJ THEN M(0,Z)=0:M(1,Z)=0
- 1560 NEXT Z
- 1580 MD=HT
- 1600 IF NJ<>NK THEN PRINT"ILLEGAL FLOWGRAPH":PRINT:GOTO 720
- 1620 PRINT #PS,"NODE REDUCTION"
- 1640 IF D1=2 THEN GOSUB 2520
- 1660 REM "SELF LOOP REDUCTION" ************************************
- 1680 FOR J=1 TO MD
- 1700 IF M(0,J)<>M(1,J) OR M(0,J)=0 THEN 2000
- 1720 REM SUBTRACT 1
- 1740 M(2,J)=1-M(2,J)
- 1760 FOR K=1 TO MD
- 1780 IF M(1,K)=M(0,J) AND J<>K THEN 1840
- 1800 GOTO 1920
- 1820 REM COMPLEX DIVISION
- 1840 ST=M(2,J)*M(2,J)+M(3,J)*M(3,J)
- 1860 MEM=M(2,K)
- 1880 M(2,K)=(M(2,K)*M(2,J)+M(3,K)*M(3,J))/ST
- 1900 M(3,K)=(M(3,K)*M(2,J)-MEM*M(3,J))/ST
- 1920 NEXT K
- 1940 M(0,J)=0:M(1,J)=0
- 1960 PRINT ,"SELF LOOP"
- 1980 IF D1=2 THEN GOSUB 2520
- 2000 NEXT J:NJ=NJ-1:GOTO 920:REM RESTART
- 2020 REM "FINAL SECTION ******************************************
- 2040 FOR X=1 TO MD
- 2060 IF M(0,X)=1 THEN A=X
- 2080 IF M(0,X)=2 THEN B=X
- 2100 NEXT X
- 2120 IF B=0 THEN X=M(2,A):Y=M(3,A):GOTO 2320
- 2140 CR=M(2,A)*M(2,B)-M(3,A)*M(3,B)
- 2160 CI=M(2,A)*M(3,B)+M(3,A)*M(2,B)
- 2180 CR=1-CR
- 2200 REM DIVIDE
- 2220 PRINT ,"REVERSION"
- 2240 ST=CR*CR+CI*CI
- 2260 X=(M(2,A)*CR+M(3,A)*CI)/ST
- 2280 Y=(M(3,A)*CR-M(2,A)*CI)/ST
- 2300 IF D1=2 THEN PRINT:PRINT,"REAL","IMAGINARY":PRINT,X,Y:PRINT
- 2320 J=SQR(X*X+Y*Y)
- 2340 K=180*ATN(Y/X)/PI
- 2360 IF X<0 THEN K=K+180
- 2380 PRINT
- 2400 PRINT,"THE ANSWER IS"
- 2420 PRINT,J;"MAGNITUDE",K;"DEGREES"
- 2440 PRINT
- 2460 PR=0
- 2480 GOTO 480
- 2500 REM DEBUGGING SECTION *************************************
- 2520 PRINT
- 2540 PRINT ,"LINE","SOURCE","LOAD","REAL","IMAGINARY"
- 2560 FOR DP=1 TO MD
- 2580 PRINT ,DP,M(0,DP),M(1,DP),M(2,DP),M(3,DP)
- 2600 NEXT
- 2620 PRINT :PRINT :PRINT
- 2640 REM IF PR=2 THEN RETURN
- 2660 INPUT U$
- 2680 RETURN
- 2700 REM ANGULAR MATRIX PRINTOUT **********************************
- 2720 LPRINT
- 2740 LPRINT ,"LINE","SOURCE","LOAD","MAGNITUDE","ANGLE"
- 2760 FOR DP=1 TO MC
- 2780 LPRINT,DP,A(0,DP),A(1,DP),A(2,DP),A(3,DP)
- 2800 NEXT
- 2820 LPRINT: LPRINT: LPRINT
- 2840 RETURN
- 2860 REM MENU SECTION ***********************************************
- 2880 PRINT ," MENU PAGE 1"
- 2900 PRINT ,
- 2920 PRINT ,"THIS PROGRAM WILL TAKE A MULTIPORT S PARAMETER NETWORK AND REDUCE"
- 2940 PRINT ,"IT THRU FLOW GRAPH TECNIQUES TO A SINGLE S PARAMETER BETWEEN"
- 2960 PRINT ,"NODES 1 AND 2. *"
- 2980 PRINT ,
- 3000 PRINT ,"THE PROGRAM REQUIRES THAT REFLECTION/XMISSION COEF DATA BE IN POLAR"
- 3020 PRINT ,"FORM, WITH A MAGNITUDE BETWEEN 0 AND 1, AND AN ANGLE BETWEEN 0 AND"
- 3040 PRINT ,"360 DEGREES. (INCIDENTALLY COMPUTATION IS DONE RECTANGULARLY.)"
- 3060 PRINT,
- 3080 PRINT ,"MODIFICATIONS MAY BE MADE TO THE INPUTTED DATA AT THE APPROPRIATE"
- 3100 PRINT ,"POINTS DURING THE PROGRAM THRU THE USE OF THE KEY SYMBOLS LISTED"
- 3120 PRINT ,"BELOW."
- 3140 PRINT ,
- 3160 PRINT ,"ADDITIONALLY, MATRIX DATA MAY BE SAVED AND RECALLED TO THE DISC"
- 3180 PRINT ,"USING THE PROPER KEY SYMBOLS LISTED BELOW."
- 3200 PRINT ,:PRINT ,
- 3220 PRINT ," * EACH S PARAMETER IS DEFINED IN THE MATRIX BY A LINE NUMBER"
- 3240 PRINT ," WHICH SPECIFIES THE SOURCE NODE, LOAD NODE, AND REFLECTION/XMISSION
- 3260 PRINT ," COEFFICIENT MAGNITUDE AND ANGLE."
- 3280 PRINT ,:PRINT ,
- 3300 INPUT " TO CONTINUE PRESS <RETURN>";U$
- 3320 PRINT ,:PRINT ,:PRINT ,:PRINT ,
- 3340 PRINT ," MENU PAGE 2
- 3360 PRINT ,:PRINT ,
- 3380 PRINT ,"SYMBOL EXPLANATION"
- 3400 PRINT ,"------ -----------"
- 3420 PRINT ," EX WILL CAUSE THE COMPUTER TO EXECUTE EXAMPLE PROGRAM."
- 3440 PRINT ," (ONLY POSSIBLE AFTER THE FIRST MENUE LISTING.)"
- 3460 PRINT ," CH CHANGE LINE DATA. "
- 3480 PRINT ," NS NODE SWITCH, THIS SUBROUTINE MAKES IT POSSIBLE TO"
- 3500 PRINT ," REDEFINE NODES 1 AND 2."
- 3520 PRINT ," PR PRINT MODIFIED MATRIX DATA.(LINE PRINTER)
- 3540 PRINT ," HC HARD COPY OF MENU.
- 3560 PRINT , " DS MATRIX DISPLAY OF COMPUTATIONS. PROMPTING IS REQUIRED"
- 3580 PRINT ," TO ADVANCE IN THIS MODE."
- 3600 PRINT ," EN EXIT PROGRAM TO XDB.
- 3620 PRINT ," PP CAUSES REDUCTION PROCESSES TO LIST TO LINE PRINTER.
- 3640 PRINT ," PA CAUSES ANSWER TO LIST TO LINE PRINTER.
- 3660 PRINT ," GO INITIATES COMPUTATION.
- 3680 PRINT ," SA MATRIX STORE TO DISC."
- 3700 PRINT ," LO MATRIX LOAD FROM DISC. (ONLY POSSIBLE AFTER THE FIRST"
- 3720 PRINT," MENU LISTING.)"
- 3740 PRINT," ME REDISPLAY MENU TO CRT.
- 3760 PRINT,:PRINT,
- 3780 RETURN
- 3800 REM EXAMPLE SECTION *******************************************
- 3820 FOR X=1 TO 18 :PRINT:NEXT
- 3840 PRINT "THIS EXAMPLE IS FOR A 3 PORT DIRECTIONAL COUPLER. THE COUPLING"
- 3860 PRINT "IS 10DB, INSERTION LOSS IS 1.2DB, DIRECTIVITY IS 25DB. THE"
- 3880 PRINT "PHASE ANGLES WERE ARBITRARILY CHOSEN. THE LOAD AND DEVICE"
- 3900 PRINT "VSWR'S ARE 1.5 AND 1.25 RESPECTIVELY. PRESS THE CARRIAGE"
- 3920 PRINT "RETURN TO PROMPT THE EXAMPLE PROGRAM TO CONTINUE."
- 3940 L$(0)="INPUT NUMBER OF LINES "
- 3960 L$(1)="INPUT NUMBER OF NODES "
- 3980 L$(2)="INPUT SOURCE NODE "
- 4000 L$(3)="INPUT LOAD NODE "
- 4020 L$(4)="INPUT REFLECTION/XMISSION COEF IN POLAR FORM "
- 4040 PRINT
- 4060 PRINT L$(0);12 :MC=12
- 4080 PRINT L$(1);6 :NI=6
- 4100 INPUT U$
- 4120 DIM A(3,48),M(3,60)
- 4140 FOR X=1 TO 12
- 4160 PRINT
- 4180 PRINT "LINE NUMBER";X
- 4200 READ DA :PRINT L$(2);DA :A(0,X)=DA
- 4220 READ DA :PRINT L$(3);DA :A(1,X)=DA
- 4240 READ DA,DB :PRINTL$(4);DA;DB :A(2,X)=DA :A(3,X)=DB
- 4260 INPUT U$
- 4280 NEXT X
- 4300 GOTO 440
- 4320 DATA 6,1,.80,10,1,6,.89,20,1,2,.48,30,3,6,.48,30
- 4340 DATA 2,3,.80,50,3,2,.89,60,1,4,.93,70,5,6,.93,70
- 4360 DATA 3,4,.10,90,5,2,.10, 90,5,4,.89,110,4,5,.80,120
- 4380 REM FILE LOAD FROM DISC **********************************
- 4400 PRINT:INPUT"FILE NAME OR DIR";F$
- 4420 IF F$="DIR" THEN DIR"*.SMA":GOTO4400
- 4440 F$=F$+".SMA"
- 4460 IF LOOKUP(F$)=0 THEN PRINT"FILE NOT FOUND":GOTO 4400
- 4480 OPEN#1,"I",F$
- 4500 READ#1,MC,NI
- 4520 DIM A(3,4*MC),M(3,5*MC)
- 4540 FOR X=1 TO MC:FOR Y=0 TO 3
- 4560 READ#1,A(Y,X):NEXT:NEXT
- 4580 PRINT"FILE LOADED INTO MATRIX"
- 4600 CLOSE#1
- 4620 GOSUB 2700:GOTO 480
- 4640 REM CHANGE SECTION *****************************************
- 4660 PRINT:INPUT"INPUT LINE NUMBER TO BE CHANGED";LN
- 4680 IF LN>MC THEN MC=LN
- 4700 PRINT:PRINTA(0,LN),A(1,LN),A(2,LN),A(3,LN)
- 4720 PRINT:PRINT
- 4740 INPUT "INPUT SOURCE NODE";A(0,LN)
- 4760 IF A(0,LN)>NI THEN NI=A(0,LN)
- 4780 INPUT"INPUT LOAD NODE";A(1,LN)
- 4800 IF A(1,LN)>NI THEN NI=A(1,LN)
- 4820 INPUT"INPUT REFLECTION/XMISSION COEF IN POLAR FORM";A(2,LN),A(3,LN)
- 4840 GOSUB 2720:RETURN
- 4860 REM NODE SWITCH SUB ************************************
- 4880 PRINT:INPUT"INPUT NODE # TO REPLACE NODE 1";NA
- 4900 INPUT "INPUT NODE # TO REPLACE NODE 2";NB
- 4920 FOR X=1 TO MC:FOR Y=0 TO 1
- 4940 IF A(Y,X)=1 THEN A(Y,X)=NA:GOTO 5020
- 4960 IF A(Y,X)=2 THEN A(Y,X)=NB:GOTO 5020
- 4980 IF A(Y,X)=NA THEN A(Y,X)=1
- 5000 IF A(Y,X)=NB THEN A(Y,X)=2
- 5020 NEXT: NEXT:GOSUB 2700:RETURN
- 5040 REM SAVE TO DISC ******************************************
- 5060 PRINT:INPUT"FILE NAME";F$:F$=F$+".SMA"
- 5080 ERASE F$:OPEN#1,"O",F$
- 5100 WRITE#1,MC,NI
- 5120 FOR X=1 TO MC:FOR Y=0 TO 3
- 5140 WRITE#1,A(Y,X):NEXT:NEXT
- 5160 CLOSE#1:RETURN
- 5180 END
-